package com.base.dao;

import java.io.Serializable;
import java.util.List;

import com.base.bean.AbsHibernateBean;

/**
 *Hibernate DAO接口 
 * @author Lin Wang
 * @param <ID>
 * @param <T>
 */

public interface IBaseDao <ID extends Serializable,T extends AbsHibernateBean>{
	
	/**
	 * 添加一个实体 
	 * @param entity
	 * @return 成功返回ID 失败返回null
	 */
	public ID save(T entity);
	
	/**
	 * 添加或修改
	 * @param entity
	 */
	public void saveOrUpdate(T entity);
	
	/**
	 * 根据HQL进行分页查询，
	 * @param hql 查询语句
	 * @param from 其实下标
	 * @param count 本页记录数
	 * @return 查询结果集
	 */
	public List<T> listByHQL(String hql,int from, int count);
	
	/**
	 * 根据HQL查询符合条件的所有记录
	 * @param hql
	 * @return
	 */
	public List<T> listByHQL(String hql);
	
	/**
	 * 根据HQL获得记录数
	 * @param hql
	 * @return
	 */
	public long getCount(String hql);
	
	/**
	 * 删除
	 * @param entity
	 */
	public void del(T entity);
	
	public int del(String hql);

	/**
	 * 批量添加,返回操作的条数
	 */
	public int addBatch(List<T> entities);
	
	/**
	 * 批量删除，返回操作的条数
	 */
	public int delBatch(List<T> entities);
	
	/**
	 * 批量更新
	 * @param entities
	 * @return
	 */
	int updateBatch(List<T> entities);
	
}
